package com.gupaoedu;

import java.util.concurrent.*;

public class CallableDemo implements Callable<String> {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executorService = Executors.newCachedThreadPool();
        CallableDemo callableDemo = new CallableDemo();
        // 此处开始执行call()方法，异步去执行
        Future<String> future = executorService.submit(callableDemo);
        System.out.println("接下来可以执行与call()方法无关的业务逻辑，此时为异步");

        // 如果一旦调用future.get()方法，为阻塞线程，那么会导致get()拿到结果后才会往下执行，否则一直阻塞状态。
        String str= future.get();// 阻塞线程。不调用则 不阻塞，
        System.out.println(str);
        // 关闭程序运行，不关闭会导致一直运行下去
        executorService.shutdown();
    }
    @Override
    public String call() throws Exception {
        System.out.println(Thread.currentThread().getName()+"开始执行了");
        return "我是异步线程";
    }
}
